/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pruebasalgoritmos;

/**
 *
 * @author Joshua
 * origen de los problemas:
 * http://projecteuler.net
 * usuario: joshua1983
 * password: correo
 */
public class Problemas {

    /*
     * Calcular la suma de los multiplos de 1000
     *
     * If we list all the natural numbers below 10 that are multiples of 3 or 5,
        we get 3, 5, 6 and 9. The sum of these multiples is 23.
        Find the sum of all the multiples of 3 or 5 below 1000.
     */

    public static void CalcularMultiplos1000(int limite_superior){

        int sumatoria = 0;
        for( int i=0; i< limite_superior; i++){
            if (esMultiplo(i, 3) || esMultiplo(i, 5)){
                System.out.println("Numero: "+Integer.toString(i));
                sumatoria += i;
            }
        }
        System.out.println("Total: "+ Integer.toString(sumatoria));
    }
    public static boolean esMultiplo(int numero_origen, int numero_comparar){
        return ((numero_origen % numero_comparar) == 0);
    }
    
    /*
     * By considering the terms in the Fibonacci sequence whose values 
     do not exceed four million, find the sum of the even-valued terms.
     * Calcular la suma de los terminos pares de la serie de fibonacci
     * menores de 4 millones
     */

    public static void seriesFibonacci(long limite_superior){
        long anterior = 1;
        long siguiente = 1;
        long sumatoria = 0;
        long sumar_terminos = 2;

        while (sumar_terminos < limite_superior ){
            sumatoria += sumar_terminos;
            anterior = siguiente + sumar_terminos;
            siguiente = anterior + sumar_terminos;
            sumar_terminos = anterior + siguiente;
            
        }
        System.out.println(sumatoria);
        
    }

    /*
     * la suma de los cuadrados de los 10 primeros numeros naturales es
     * 1^2 + 2^2 + ... + 10^2 = 385
     * el cuadrado de la suma de los 10 primeros numeros naturales es
     * (1 + 2 + ... + 10)^2 = 55^2 = 3025
     * la diferencia es = 3025 - 385 = 2640
     *
     * Encuentre la diferencia entre la suma de los cuadrados de los primeros
     * 100 numeros naturales y el cuadrado de la suma
     */
    public static void problema6(){
        long suma_cuadrados = 0;
        long suma_naturales = 0;
        long respuesta =0;

        for (double i=1;i<=100;i += 2){
            suma_cuadrados += Math.pow(i, 2) + Math.pow(i+1, 2);
        }
        System.out.println(suma_cuadrados);

        for (int i=1;i <=100; i++){
            suma_naturales += i;
        }
        
        suma_naturales = (long) Math.pow(suma_naturales, 2);
        System.out.println(suma_naturales);

        respuesta = Math.round(suma_naturales) - suma_cuadrados;
        System.out.println(respuesta);
    }

    /*
     * 2520 es el menor numero que puede ser dividido por cada numero del 1 al 10
     * sin dejar residuo, cual es el menor numero del 1 al 20
     */

    public static void problema5(){
        int numero = 2;
        int[] numero_candidato = new int[10];
        int i = 1;
        int j = 0;
        while ( true){
            if (numero % i == 0){
                numero_candidato[j] = numero;
                System.out.println(numero);
                if (j==9)
                    break;
            }
            if (i==10){
                i=1;
                numero++;
            }
            i++;
        }
        for(int k : numero_candidato){
            System.out.println(numero_candidato[k] + "-" + i);
        }
    }


}
